package interview.huawei.tjt.training.shuzu;

import java.util.Scanner;

/**
 * 给定一个含有 n 个正整数的数组和一个正整数 s ，找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组，并返回其长度。如果不存在符合条件的子数组，返回 0。
 *
 * 示例：
 *
 * 输入：s = 7, nums = [2,3,1,2,4,3] 输出：2 解释：子数组 [4,3] 是该条件下的长度最小的子数组。
 */
// 双指针法
public class MinSubArrayLen {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String string = sc.nextLine();
            int s = Integer.parseInt(string);
            String[] str = sc.nextLine().split(",");
            int[] nums = new int[str.length];
            int sum = 0;
            for (int i = 0; i < str.length; i++) {
                if (!str[i].equals("") && str[i] != null) {
                    nums[i] = Integer.parseInt(String.valueOf(str[i]));
                    sum += nums[i];
                }
            }
            if (sum < s) {
                System.out.println("0");
            } else {
                int p = 0; // p为慢指针
                int len = nums.length;
                int sum1 = 0;
                for (int i = 0; i < nums.length; i ++) {
                    sum1 += nums[i];
                    while (sum1 >= s) {   // 这里不能用if，因为if可能存在在减掉nums[p]之后的sum1的值仍大于等于s
//                        if ((i - p + 1) < len) {
//                            len = i - p + 1;
//                        }
                        len = Math.min(len,i - p + 1);
                        sum1 = sum1 - nums[p ++];
                    }
                }
                System.out.println(len);
            }
        }
    }

}
